﻿Public Class MitarbeiterServiceImpl
    Inherits PersistenceServiceImpl(Of Mitarbeiter, MitarbeiterManager)
    Implements MitarbeiterService
    Implements LoginServiceListener

    Private loginMitarbeiter As Mitarbeiter

    Sub New()
        MyBase.New(New MitarbeiterManagerImpl())
        Context.LOGIN_SERVICE.getObservable.addListener(Me)
    End Sub

    Protected Overrides Sub beforeDelete(ByRef entity As Mitarbeiter)
        'check for own id:
        If (loginMitarbeiter.id = entity.id) Then
            Throw New Exception("Sie können sich nicht selber aus der Datenbank löschen. Sie könnten sich sonst selber aussperren.")
        End If
        Context.ZEITRAPPORT_SERVICE.deleteByMitarbeiter(entity)
    End Sub

    Protected Overrides Sub beforeSave(ByRef entity As Mitarbeiter)
        ' nothing
        ' check for unique
        If entity.id = 0 Then
            If manager.findByName(entity) IsNot Nothing Then
                Throw New Exception("Mitarbeiter existiert bereits")
            End If
        End If
    End Sub

    Protected Overrides Sub fillUp(ByRef entity As Mitarbeiter)
        ' nothing
    End Sub

    Public Function findByNameAndPassword(ByRef mitarbeiter As Mitarbeiter) As Mitarbeiter Implements MitarbeiterService.findByNameAndPassword
        Connection.open()
        Dim result As Mitarbeiter = manager.findByNameAndPassword(mitarbeiter)
        Connection.close()
        Return result
    End Function

    Public Sub loginMitarbeiterChanged(ByRef newMitarbeiter As Mitarbeiter) Implements LoginServiceListener.loginMitarbeiterChanged
        Me.loginMitarbeiter = newMitarbeiter
    End Sub
End Class
